<?php
/**
 * Created by PhpStorm.
 * User: yuanxr
 * Date: 2018/6/10
 * Time: 上午8:17
 */

namespace Utility;

/**********************************************************************************************************************
 * 实用杂项工具功能
 *
 * 1、get：获取环境相关数据
 **********************************************************************************************************************/
/**********************************************************************************************************************
 * /get：获取环境相关数据
 **********************************************************************************************************************/
class Get
{
    /**
     * protocol
     *
     * @return string 获取连接协议（http或https），小写格式
     */
    public function protocol()
    {
        return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    }

    /**
     * fullpath
     *
     * @return string 获取当前浏览器地址的全路径字符串（不包含http, https）
     */
    public function fullurl()
    {
        return $this->protocol() . "$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    }

    /**
     * host
     *
     * @return string 获取服务器域名信息（包含端口号）
     */
    public function host()
    {
        return $_SERVER['HTTP_HOST'];
    }
    
    /**
     * query
     *
     * @return string 获取当前浏览器地址的queryString部分字符串
     */
    public function query()
    {
        $result = $_SERVER['QUERY_STRING'];
        $result = trim(strip_tags(htmlspecialchars($result)));
        return $result;
    }

    /**
     * raw
     *
     * @param string $default 默认值
     * @return string 获取post提交过来的原始数据字符串
     */
    public function raw(string $default = "")
    {
        $result = urldecode(file_get_contents('php://input', 'r'));
        return $result ?? $default;
    }

    /**
     * method
     *
     * @return string 获取本次访问的访问方法（get, post等）
     */
    public function method()
    {
        return strtolower($_SERVER['REQUEST_METHOD']);
    }

    /**
     * php
     *
     * @return string 获取当前访问的文件名称（比如：index.php）
     */
    public function php()
    {
        return substr($_SERVER['PHP_SELF'], strrpos($_SERVER['PHP_SELF'], '/') + 1);
    }

    /**
     * os
     *
     * @return string 获取当前服务器的操作系统（小写）
     */
    public function os()
    {
        if (PATH_SEPARATOR == ':') {
            return 'linux';
        } else {
            return 'windows';
        }
    }

    /**
     * ip
     *
     * @return string 获取用户的真实ip地址
     */
    public function ip()
    {
        $ip = 'unknow';
        if (getenv("HTTP_CLIENT_IP")) {
            $ip = getenv("HTTP_CLIENT_IP");
        } elseif (getenv("HTTP_X_FORWARDED_FOR")) {
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        } elseif (getenv("REMOTE_ADDR")) {
            $ip = getenv("REMOTE_ADDR");
        }
        return $ip;
    }

    /**
     * agent
     *
     * @return string 获取用户使用的浏览器类型
     */
    public function agent()
    {
        $agent = $_SERVER['HTTP_USER_AGENT'];
        if (false!==strpos($agent, 'MicroMessage')) {
            return 'wechat';
        }
        if (false!==strpos($agent, 'MSIE 9.0')) {
            return 'ie9';
        }
        if (false!==strpos($agent, 'MSIE 8.0')) {
            return 'ie8';
        }
        if (false!==strpos($agent, 'MSIE 7.0')) {
            return 'ie7';
        }
        if (false!==strpos($agent, 'MSIE 6.0')) {
            return 'ie6';
        }
        if (false!==strpos($agent, 'Firefox')) {
            return 'firefox';
        }
        if (false!==strpos($agent, 'Chrome')) {
            return 'chrome';
        }
        if (false!==strpos($agent, 'Safari')) {
            return 'safari';
        }
        if (false!==strpos($agent, 'Opera')) {
            return 'opera';
        }
        if (false!==strpos($agent, '360SE')) {
            return '360';
        }
        if (empty($agent)) {
            return 'robot';
        }
    }
}
